package com.example.aigc_education.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.aigc_education.anno.RequestKeyParam;
import com.example.aigc_education.anno.RequestLock;
import com.example.aigc_education.domain.DaysMatter;
import com.example.aigc_education.domain.vo.DaysMatterVO;
import com.example.aigc_education.service.DaysMatterService;
import com.example.aigc_education.utils.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/daysMatter")
public class DaysMatterController {

    @Autowired
    private DaysMatterService daysMatterService;


    /**
     * 添加倒数日事件
     * @param daysMatter    倒数日对象
     * @return              返回倒数日的id
     */
    @RequestLock(prefix = "addDaysMatter:",expire = 3)
    @PostMapping("/add")
    public ResultUtil addDaysMatter(@RequestKeyParam @RequestBody DaysMatter daysMatter){
        // 调用DaysMatterService的addDaysMatter方法添加倒数日事件
        DaysMatter dm = daysMatterService.addDaysMatter(daysMatter);
        Long daysMatterId = dm.getDaysMatterId();

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success( daysMatterId );
    }

    /**
     * 页面展示，展示用户所有的倒数日事件
     * @return      倒数日的集合
     */
    @GetMapping("/list")
    public ResultUtil daysMatterList(){
        // 调用DaysMatterService的daysMatterList方法返回用户的所有的倒数日事件
        List<DaysMatterVO> list = daysMatterService.daysMatterList();

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success(list);
    }


    /**
     *  倒数日的修改
     * @param daysMatter    修改后的倒数日
     * @return      倒数日的id
     */
    @RequestLock(prefix = "updateDaysMatter:",expire = 3)
    @PutMapping("/update")
    public ResultUtil updateDaysMatter(@RequestKeyParam@RequestBody DaysMatter daysMatter){
        // 调用DaysMatterService的updateDaysMatter方法修改倒数日事件
        DaysMatter dm = daysMatterService.updateDaysMatter(daysMatter);
        Long daysMatterId = dm.getDaysMatterId();

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success( daysMatterId );
    }

    /**
     *  删除倒数日事件
     * @param daysMatterId      倒数日Id
     * @return              ResulUtil对象
     */
    @RequestLock(prefix = "deleteDaysMatter:",expire = 3)
    @DeleteMapping("/delete")
    public ResultUtil deleteDaysMatter(@RequestKeyParam@RequestParam Long daysMatterId){
        // 调用DaysMatterService的deleteDaysMatter方法删除倒数日事件
        daysMatterService.deleteDaysMatter(daysMatterId);

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success();
    }

    /**
     *  根据daysMatterId查询倒数日事件
     * @param daysMatterId  倒数日事件的id
     * @return              倒数日对象
     */
    @GetMapping("/query")
    public ResultUtil selectDaysMatter(@RequestParam Long daysMatterId){
        // 调用DaysMatterService的updateDaysMatter方法查询倒数日事件
        DaysMatter daysMatter = daysMatterService.selectDaysMatter(daysMatterId);

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success(daysMatter);
    }


    /**
     *  倒数日的分页展示
     * @param page          起始页
     * @param pageSize      终止页
     * @param userId        用户id
     * @return              倒数日集合
     */
    @GetMapping("/page")
    public ResultUtil pageDaysMatter(Integer page, Integer pageSize, Long userId ){
        // 调用DaysMatterService的pageDaysMatter方法返回倒数日事件
        Page<DaysMatter> list = daysMatterService.pageDaysMatter(page, pageSize, userId);

        // 返回操作成功的ResultUtil对象
        return ResultUtil.success(list);
    }
}
